/**
 * 通用分页响应接口
 */
export interface PageResponse<T> {
  content: T[]           // 当前页数据
  page: number          // 当前页码
  size: number          // 每页大小
  totalElements: number // 总记录数
  totalPages: number    // 总页数
  first: boolean        // 是否第一页
  last: boolean         // 是否最后一页
  hasNext: boolean      // 是否有下一页
  hasPrevious: boolean  // 是否有上一页
}

/**
 * 考试状态枚举
 */
export type ExamStatus = 'DRAFT' | 'PUBLISHED' | 'ONGOING' | 'FINISHED' | 'ARCHIVED'

/**
 * 考试接口
 */
export interface Exam {
  id?: number
  title: string                    // 考试标题
  description?: string             // 考试描述
  duration: number                 // 考试时长（分钟）
  totalScore?: number              // 总分
  passingScore?: number            // 及格分数
  startTime?: string               // 开始时间
  endTime?: string                 // 结束时间
  status: ExamStatus               // 考试状态
  subjectName?: string             // 学科名称
  createdById?: number             // 创建者ID
  createdByName?: string           // 创建者姓名
  questionIds?: number[]           // 题目ID列表
  createdAt?: string               // 创建时间
  updatedAt?: string               // 更新时间
}

/**
 * 试题类型枚举
 */
export type QuestionType = 'SINGLE_CHOICE' | 'MULTIPLE_CHOICE' | 'TRUE_FALSE' | 'FILL_BLANK' | 'ESSAY'

/**
 * 试题选项接口
 */
export interface QuestionOption {
  id?: number
  optionKey: string                // 选项标识（A、B、C、D）
  optionValue: string              // 选项内容
  isCorrect?: boolean              // 是否正确答案
  sort?: number                    // 排序
}

/**
 * 试题接口
 */
export interface Question {
  id?: number
  title: string                    // 试题标题
  content: string                  // 试题内容
  type: QuestionType               // 试题类型
  difficulty: number               // 难度等级（1-5）
  correctAnswer?: string           // 正确答案
  explanation?: string             // 答案解析
  options?: QuestionOption[]       // 选项列表
  createdAt?: string               // 创建时间
  updatedAt?: string               // 更新时间
}

/**
 * 用户接口
 */
export interface User {
  id?: number
  username: string                 // 用户名
  email?: string                   // 邮箱
  fullName?: string                // 真实姓名
  phone?: string                   // 手机号
  avatarUrl?: string               // 头像URL
  enabled?: boolean                // 是否启用
  accountLocked?: boolean          // 是否锁定
  lastLoginTime?: string           // 最后登录时间
  roles?: string[]                 // 角色列表
  permissions?: string[]           // 权限列表
  createdAt?: string               // 创建时间
  updatedAt?: string               // 更新时间
}

/**
 * 登录请求接口
 */
export interface LoginRequest {
  username?: string                // 用户名
  password?: string                // 密码
  phone?: string                   // 手机号（短信登录）
  smsCode?: string                 // 短信验证码
  captcha?: string                 // 图片验证码
  captchaKey?: string              // 验证码key
  rememberMe?: boolean             // 记住我
}

/**
 * 登录响应接口
 */
export interface LoginResponse {
  token: string                    // JWT令牌
  user: User                       // 用户信息
  expiresIn: number                // 过期时间（秒）
}

/**
 * API响应接口
 */
export interface ApiResponse<T = any> {
  code: number                     // 响应码
  message: string                  // 响应消息
  data: T                          // 响应数据
  timestamp: number                // 时间戳
}

/**
 * 菜单项接口
 */
export interface MenuItem {
  id: string
  title: string                    // 菜单标题
  icon?: string                    // 图标
  path?: string                    // 路由路径
  component?: string               // 组件名
  children?: MenuItem[]            // 子菜单
  meta?: {
    requiresAuth?: boolean         // 是否需要认证
    roles?: string[]               // 需要的角色
    permissions?: string[]         // 需要的权限
  }
}

/**
 * 表格列配置接口
 */
export interface TableColumn {
  prop: string                     // 属性名
  label: string                    // 列标题
  width?: string | number          // 列宽度
  minWidth?: string | number       // 最小宽度
  align?: 'left' | 'center' | 'right' // 对齐方式
  sortable?: boolean               // 是否可排序
  formatter?: (row: any, column: any, cellValue: any) => string // 格式化函数
}

/**
 * 公告接口
 */
export interface Notice {
  id?: number
  title: string
  content: string
  status: string
  type?: string
  targetType?: string
  targetIds?: string
  isTop?: boolean
  isUrgent?: boolean
  priority: number
  publishTime?: string
  expireTime?: string
  viewCount?: number
  createdBy?: number
  creatorUsername?: string
  creatorFullName?: string
  createdAt?: string
  updatedAt?: string
  publishedAt?: string
}

/**
 * 表单验证规则接口
 */
export interface FormRule {
  required?: boolean               // 是否必填
  message?: string                 // 错误消息
  trigger?: string | string[]      // 触发方式
  min?: number                     // 最小长度
  max?: number                     // 最大长度
  pattern?: RegExp                 // 正则表达式
  validator?: (rule: any, value: any, callback: Function) => void // 自定义验证器
}